package com.hardware;

import com.hardware.dll.AidierDLL;
import com.hardware.service.AidierService;
import com.hardware.service.impl.AidierServiceImpl;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Pos;
import javafx.scene.ImageCursor;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.util.Optional;

/**
 * @作者 韩宗森
 * @创建时间 2024年10月30日 15:04
 */

public class FxDemoApp extends Application {

    private Integer softwareIn = 18; // 门锁系统  A90-18

    private String serverIn = "10.147.18.167";

    private String usernameIn = "amdin"; // 用户名

    private Integer portIn = 1; // 串口号，1-COM1

    private Integer encoderIn = 0; // 手动发行机

    private Integer TmEncoderIn = 1; // TM发行机类型，1-DS9097E，5-DS9097U

    // 定义文件路径
    private  String filePath = "src/main/resources/application.yml";


    // 窗口
    @Override
    public void start(Stage stage) throws Exception {
        System.out.println("start ...");

       /* Yaml yaml = new Yaml();
        try (InputStream in = new FileInputStream(filePath)) {
            // 将 YAML 文件内容转换为 Map
            Map<String, Object> data = yaml.load(in);

            // 修改属性
            Map<String, Object> appData = (Map<String, Object>) data.get("aidier");
            if (appData != null) {
                softwareIn = (Integer) appData.get("software");
                serverIn = (String) appData.get("server");
                usernameIn = (String) appData.get("username");
                portIn = (Integer) appData.get("port");
                encoderIn = (Integer) appData.get("encoder");
                TmEncoderIn = (Integer) appData.get("tmEncoder");
                System.out.println("yml文件读取的: " + "softwareIn: " + softwareIn + "; serverIn: " + serverIn + "; usernameIn: "
                        + usernameIn + "; portIn: " + portIn + "; encoderIn: " + encoderIn+ "; TmEncoderIn: " + TmEncoderIn);


            }
        } catch (IOException e) {
            e.printStackTrace();
        }*/


        AidierService aidierService = new AidierServiceImpl();
        aidierService.initDoor(softwareIn, serverIn, usernameIn, portIn, encoderIn, TmEncoderIn);

        // 加载xml布局
        Parent parent = FXMLLoader.load(getClass().getResource("/xml/MainView.fxml"));

        // 场景 不设置宽高,就是自适应
        Scene scene = new Scene(parent);


        // 设置窗口标题
        stage.setTitle("爱迪尔门锁");
        // 设置串口图标
        stage.getIcons().add(new Image("image/logo.png"));
        // 把场景设置到窗口
        stage.setScene(scene);
        // 是否能改变窗口大小 默认: 是
        stage.setResizable(false);
        // 窗口样式 默认就行
        // stage.initStyle(StageStyle.DECORATED);


        // 显示窗口
        stage.show();

        // 测试代码
        // test(stage);
        // changeScene(stage);
        // nodeTest(stage);

    }


    @Override
    public void init() throws Exception {
        super.init();
        System.out.println("init... 初始化...");
    }

    @Override
    public void stop() throws Exception {
        super.stop();

        System.out.println("stop... 关闭资源操作...");

        // 关闭 结束工作期
        int ret = AidierDLL.INSTANCE.EndSession();
        if (ret == 0) {
            System.out.println("结束工作期成功!");
            System.out.println("---------------------------------------------------------------------");

        } else {
            System.out.println("结束工作期错误! 错误码: " + ret);
        }

    }


    // Node测试
    private void nodeTest(Stage stage) {
        Label label = new Label("Hello World");
        // 坐标
        label.setLayoutX(100);
        label.setLayoutY(100);
        // 样式
        label.setStyle("-fx-background-color: red ;-fx-border-color: blue;");
        // 大小
        label.setPrefWidth(150);
        label.setPrefHeight(50);
        // 居中
        label.setAlignment(Pos.CENTER);
        // 是否显示
        label.setVisible(true);
        // 透明度 0~1
        label.setOpacity(0.5);

        AnchorPane anchorPane = new AnchorPane();
        anchorPane.getChildren().add(label);
        Scene scene = new Scene(anchorPane, 500, 500);


        // 设置窗口标题
        stage.setTitle("爱迪尔门锁");
        // 设置串口图标
        stage.getIcons().add(new Image("image/logo.png"));
        // 把场景设置到窗口
        stage.setScene(scene);
        // 是否能改变窗口大小 默认: 是
        stage.setResizable(false);
        // 窗口样式
        stage.initStyle(StageStyle.DECORATED);


        // 显示窗口
        stage.show();

    }


    // 场景切换测试
    private void changeScene(Stage stage) {
        Button button1 = new Button("打开一个窗口");
        // 位置
        button1.setLayoutX(200);
        button1.setLayoutY(200);


        // 自定义布局
        AnchorPane anchorPane1 = new AnchorPane();
        anchorPane1.getChildren().addAll(button1);

        // 场景
        Scene scene1 = new Scene(anchorPane1, 500, 600);

        Label label = new Label("你好");
        label.setLayoutX(100);
        label.setLayoutY(100);

        Button button2 = new Button("返回");
        button2.setLayoutX(100);
        button2.setLayoutY(120);

        AnchorPane anchorPane2 = new AnchorPane();
        anchorPane2.getChildren().addAll(label, button2);
        // 场景
        Scene scene2 = new Scene(anchorPane2, 500, 600);
        // 设置鼠标 样式
        scene2.setCursor(new ImageCursor(new Image("image/logo.png")));

        // 事件
        button1.setOnAction(event -> {
            // 把场景设置到窗口
            stage.setScene(scene2);
        });
        // 事件
        button2.setOnAction(event -> {
            // 把场景设置到窗口
            stage.setScene(scene1);
        });


        // 设置窗口标题
        stage.setTitle("窗口标题");
        // 设置串口图标
        stage.getIcons().add(new Image("image/logo.png"));
        // 把场景设置到窗口
        stage.setScene(scene1);
        // 是否能改变窗口大小 默认: 是
        stage.setResizable(false);
        // 窗口样式
        stage.initStyle(StageStyle.DECORATED);


        // 显示窗口
        stage.show();
    }

    // 窗口按钮显示测试
    private void test(Stage stage) {
        // 按钮
        Button button = new Button("打开一个网站");
        // 按钮点击事件
        button.setOnAction(event -> {
            getHostServices().showDocument("https://www.baidu.com");
        });


        Button button1 = new Button("打开一个窗口");
        // 位置
        button1.setLayoutX(200);
        button1.setLayoutY(200);
        // 事件
        button1.setOnAction(event -> {

            // 创建一个新窗口
            Stage stage1 = new Stage();
            stage1.setHeight(200);
            stage1.setWidth(400);

            // Modality.NONE:默认 非模态,随便开
            // APPLICATION_MODAL: 只活动当前窗口,父窗窗口不能点
            // WINDOW_MODAL:
            stage1.initModality(Modality.APPLICATION_MODAL);
            stage1.show();


            // 取消默认退出事件 放在事件外面
            //Platform.setImplicitExit(false);
            // 退出程序 放在事件里面
            // Platform.exit();
            stage1.setOnCloseRequest(event1 -> {
                // 取消关闭窗口
                event1.consume();

                Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
                alert.setTitle("退出程序");
                alert.setHeaderText(null);
                alert.setContentText("是否要退出?");

                Optional<ButtonType> result = alert.showAndWait();
                if (result.get() == ButtonType.OK) {


                    // 关闭窗口
                    stage1.close();
                }
            });
        });


        Button button2 = new Button("button2");
        button2.setLayoutX(200);
        button2.setLayoutY(220);
        // 事件
        button2.setOnAction(event -> {
            // 创建一个新窗口
            Stage stage2 = new Stage();
            stage2.setHeight(200);
            stage2.setWidth(400);

            // Modality.NONE:默认 非模态,随便开
            // APPLICATION_MODAL: 只活动当前窗口,父窗口不能点
            // WINDOW_MODAL:
            stage2.initModality(Modality.WINDOW_MODAL);
            stage2.show();
        });
        Button button3 = new Button("button3");
        button2.setLayoutX(220);
        button2.setLayoutY(260);

        AnchorPane anchorPane = new AnchorPane();
        anchorPane.getChildren().addAll(button1, button2, button3);
        // 静态文本
        Label label = new Label("Hello World");

        // 页面布局
        // BorderPane pane = new BorderPane();
        // pane.setTop(label);
        // pane.setCenter(button);


        // 场景
        Scene scene = new Scene(anchorPane, 500, 600);


        // 设置窗口标题
        stage.setTitle("窗口标题");
        // 设置串口图标
        stage.getIcons().add(new Image("image/logo.png"));
        // 把场景设置到窗口
        stage.setScene(scene);
        // 是否能改变窗口大小 默认: 是
        stage.setResizable(false);
        // 窗口样式
        stage.initStyle(StageStyle.DECORATED);


        // 显示窗口
        stage.show();
    }


}
